<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>ref</title>
</head>
<body>
<div id="app"></div>
<script src="../lib/babel.min.js"></script>
<script src="../lib/react.development.js"></script>
<script src="../lib/react-dom.development.js"></script>
<script src="../lib/prop-types.js"></script>
<script type="text/babel">
  class Demo extends React.Component {
    constructor(props) {
      super(props);
    }

    showData = ()=>{
      alert(this.refs.input1.value)
    }

    render() {
      return (
        <div>
          <input ref='input1' type="text"/>
          <button onClick={this.showData}>点击alert左边的输入</button>
          <input ref={currentNode=>this.input2=currentNode} onBlur={()=>{alert(this.input2.value)}} type="text" placeholder="失去焦点就alert"/></div>
      )
    }
    /*
    不推荐使用字符串类型的ref
    1. 回调形式的ref
      - 内联形式的ref，即ref={(c)=>this.xxx=c}会在组件更新渲染时执行两次，第一次c为null(为了清空refs)，第二次才是正常的dom结点
      - 类绑定形式的ref，即先定义回调函数xxxRef = (c) => this.xxx = c; 然后ref={this.xxxRef}，即可避免上面内联形式的ref执行两次的问题，但是这样写有点麻烦，因此常用的还是内联形式的ref
     */
  }
  ReactDOM.render(<Demo/>, document.getElementById('app'));
</script>
</body>
</html>
